package com.microcore.service.tree;

import java.util.LinkedList;
import java.util.List;

public class MyMain {
    //处理与操作
    private static boolean doAnd(Tree1 tree) {
        if (tree.getTree() == null || tree.getTree() == null) {
            //没有子节点，说明是末节点
            return tree.isResult();
        }
        for (Tree1 tree1 : tree.getTree()) {
            if (tree1.getTree() == null || tree1.getTree() == null) {
                //没有子节点，说明是末节点
                if (!tree1.isResult()) {
                    return false;
                }
            } else {
                //不是末节点
                if (tree1.isAndOperat()) {
                    return doAnd(tree1);
                } else {
                    //是与
                    return doHuo(tree1);
                }
            }
        }
        return true;

    }

    //处理或操作
    private static boolean doHuo(Tree1 tree) {
        if (tree.getTree() == null || tree.getTree() == null) {
            //没有子节点，说明是末节点
            return tree.isResult();
        }
        for (Tree1 tree1 : tree.getTree()) {
            if (tree1.getTree() == null || tree1.getTree() == null) {
                //没有子节点，说明是末节点
                if (tree1.isResult()) {
                    return true;
                }
            } else {
                //不是末节点
                if (tree1.isAndOperat()) {
                    return doAnd(tree);
                } else {
                    //是与
                    return doHuo(tree);
                }
            }
        }
        return false;
    }
    private static Tree1 getTree() {
        Tree1 tree = new Tree1();
        Tree1 tree1_1 = new Tree1();
        Tree1 tree1_2 = new Tree1();
        Tree1 tree1_1_1 = new Tree1();
        Tree1 tree1_1_2 = new Tree1();
        Tree1 tree1_1_3 = new Tree1();
        Tree1 tree1_2_1 = new Tree1();

        tree.setAndOperat(true);//父节点  与操作
        tree.setPoint(false);
        tree1_1.setPoint(false);
        tree1_1.setAndOperat(true);
        tree1_2.setAndOperat(true);
        tree1_2.setPoint(false);
        tree1_2_1.setResult(true);
        tree1_2_1.setPoint(true);
        List<Tree1> list1_2 = new LinkedList<>();
        list1_2.add(tree1_2_1);
        tree1_2.setTree(list1_2);

        tree1_1_1.setPoint(true);
        tree1_1_1.setResult(true);

        tree1_1_2.setPoint(true);
        tree1_1_2.setResult(true);

        tree1_1_3.setPoint(true);
        tree1_1_3.setResult(true);

        List<Tree1> list1_1 = new LinkedList<>();
        list1_1.add(tree1_1_1);
        list1_1.add(tree1_1_2);
        list1_1.add(tree1_1_3);

        tree1_1.setTree(list1_1);

        List<Tree1> list1 = new LinkedList<>();
        list1.add(tree1_1);
        list1.add(tree1_2);

        tree.setTree(list1);

        return tree;


    }
}